//
//  EmoticonViewModel.swift
//  03-表情键盘
//
//  Created by 房城鸿 on 15/10/18.
//  Copyright © 2015年 房兰峰. All rights reserved.
//

import UIKit

/**
从 Emoticon.bundle 中读取 emoticon.plist
遍历 packages 数组，创建EmoticonPackage 的数组

 --在swift 中，一个对象可以不继承自  NSObj二重天
 --  继承自NSObjcect 可以使用 KVC 方法给属性设置数值 ==》如果是模型对象，最好还是 使用
 -- 如果 对象 ，没有属性，或者不是呀KVC ，可以建立一个没有父类的对象，独享的量级 比较轻

*/
/// 表情的视图模型  --》 加载表情数据

// : NSObject

class EmoticonViewModel {
    
     ///单例
    static let sharedViewModel = EmoticonViewModel()
    
    private init(){
    
        //加载表情包
        loadPackages()
    }
    

    ///  表情包的数据
    lazy var package = [EmoticonPackage]()
    
    /// 添加最近的表情
    ///
    ///  - parameter indexPath: indexPath
    func favorite(indexPath:NSIndexPath){
    
//        printLog(indexPath)
        
        //0 如果是第 0 组，不在参与排序
        if indexPath.section == 0{
            return
        }
        
        
        //记录选择的哪一个模型
        //1. 获得表情符号
        let em = emoticon(indexPath)
        em.times++
        
        
        printLog(em)
        
        //2. 将所有表情符号添加到第 0 组的首位
        // 判断是否已经存在表情
        if !package[0].emoticons.contains(em){
            package[0].emoticons.insert(em, atIndex: 0)
        }
        
        //3.对数组进行排序，直接排序当前数组 sortInplace 
        // swift 中，岁尾随闭包，同时有返回值的又一个简单写法
//        package[0].emoticons.sortInPlace { (obj1, obj2) -> Bool in
//            return obj1.times > obj2.times
//        }

        // $0 对应一个参数， $1 对应第二个参数，以此类推，return 可以省略
        package[0].emoticons.sortInPlace { $0.times > $1.times }
        
        //4. 删除多余的表情 -- 倒数第二个
        if package[0].emoticons.count > 21 {
            package[0].emoticons.removeAtIndex(19)
        }
        
        printLog(package[0].emoticons as NSArray)
        printLog(package[0].emoticons.count)
    }
    
    ///  根据indexPath 返回对应的表情模型
    ///
    ///  - parameter indexPath:
    ///
    ///  - returns: 表情模型
    func emoticon(indexPath:NSIndexPath) -> Emoticon {
        return package[indexPath.section].emoticons[indexPath.item]
    }
    
    //MARK: - 私有函数  加载表情包
    private func loadPackages(){
        
        //0. 添加最近分组
        package.append(EmoticonPackage(dict: ["group_name_cn":"最近"]))
        
        //1. 读取 emoticons.plist
        let path = NSBundle.mainBundle().pathForResource("emoticons.plist", ofType: nil, inDirectory: "Emoticons.bundle")
        //2. 读取字典
        let dict = NSDictionary(contentsOfFile: path!)
        
        //3. 获取 packages 数组
        let array = dict!["packages"] as! [[String:AnyObject]]
        
        //4. 遍历数组，创建模型
        for infoDict in array{
            
            //1. 获取字典 id,目录中对应的 info.plist 才是表情包的数据
            let id = infoDict["id"] as! String
            
            //2.拼接表情包路径
            let emPath = NSBundle.mainBundle().pathForResource("info.plist", ofType: nil, inDirectory: "Emoticons.bundle/" + id)
            
            //3.加载 info.plist 字典
            let packageDict = NSDictionary(contentsOfFile: emPath!) as! [String:AnyObject]
            
            //4. 字典转模型
            package.append(EmoticonPackage(dict: packageDict))
        }
//        print(package)
    }
    

}
